package com.fengye.common.utils;

import com.fengye.common.domain.entity.Article;
import com.fengye.common.domain.vo.HotArticleVo;
import org.springframework.beans.BeanUtils;

import java.util.List;
import java.util.stream.Collectors;

/**
 * BeanCopyUtils
 *
 * @author 枫叶fy
 * @description bean拷贝
 * @since 2024/2/25 14:58
 */
public class BeanCopyUtils {
    private BeanCopyUtils() {
    }

    /**
     * 将source对象的属性拷贝到类型为clazz对象对应的属性值上
     *
     * @param source 源对象
     * @param clazz  目标对象的类型
     * @return T
     */
    public static <S, T> T copyBean(S source, Class<T> clazz) {
        T target = null;
        try {
            target = clazz.newInstance();
            BeanUtils.copyProperties(source, target);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return target;
    }

    /**
     * 复制列表中的对象到另一种类型的对象列表。
     *
     * @param sourceList 源对象列表，类型为 S。
     * @param clazz 目标对象的类，类型为 T 的 Class 对象。
     * @return 包含复制后的对象的列表，类型为 T。
     */
    public static <S, T> List<T> copyBeanList(List<S> sourceList, Class<T> clazz) {
        return sourceList.stream().map((item) -> copyBean(item, clazz)).collect(Collectors.toList());
    }

    public static void main(String[] args) {
        Article article = new Article();
        article.setId(1L);
        article.setTitle("ss");

        HotArticleVo hotArticleVo = copyBean(article, HotArticleVo.class);
        System.out.println(hotArticleVo);
    }
}
